Hello,我是 KK,今年的鐵人賽,想跟大家分享架設 n8n 遇到的一些挑戰跟意外,就讓我們一起學習吧。
繼上一篇 [[鐵人賽 day2 - 免費仔的想法 - n8n 的收費機制與 Community 版功能]] 聊的,官方有提供雲端服務,也有提供 Community 讓我們自架,一開始主題就說了是免費仔,所以當然要來講解一下到底怎麼自架。
官方提供了幾個方式[^1],讓我們來一一看過:
雖然有點違反直覺,但 n8n 是一個 TypeScript
專案。所以最簡單的一個方式,就是直接在本機 command 下指令
npm install n8n -g
這樣就裝好了,只是要啟動時還要另外下指令
n8n
# or
n8n start
我個人並不喜歡這種做法,因為一來會直接安裝在本機,環境可能會有衝突或污染,而且每次重開機後還要記得啟動 n8n。
另外,如果沒有安裝 npm 的人,要先到Node.js 官網 下載安裝。Windows, Mac 都可以直接下載安裝檔,就不再多提。
自從 Docker 出現之後,後來比較完整的專案,幾乎都能使用 docker 來安裝。
而且通常都會上傳到 Docker Hub,也不太需要花什麼心思處理環境問題。所以安裝指令就像下面這樣單純:
docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
通常下這個指令,你的 n8n 就啟起來了。雖然還有一些小問題,像是重開機後會消失,但這個我們微調一下 docker run 的參數就好了。更重要的是我們現在得到了一個更乾淨的環境 ^2b13bc
原生的 n8n 是使用 SQLite
來儲存的,但你高興的話可以另外要求連去 PostgreSQL,只是要加一些參數
docker volume create n8n_data docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e DB_TYPE=postgresdb \
-e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
-e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
-e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
-e DB_POSTGRESDB_USER=<POSTGRES_USER> \
-e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
-e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
應該是看名稱就知道,都是用來指定 PostgreSQL 相關的資訊而已。
你或許會想使用 Docker Compose 來同時啟動 PostgreSQL 跟 n8n 的 Docker Container,這裡我先提供一個簡單的範例,可能要再視情況修改。
version: '3.8'
services:
postgres:
image: postgres:latest
container_name: n8n-postgres
restart: always
environment:
- POSTGRES_DB=n8n
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=your_secure_password
volumes:
- postgres_data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: always
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your_secure_password
- N8N_HOST=localhost
- N8N_PROTOCOL=http
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
volumes:
n8n_data:
postgres_data:
當然 PostgreSQL 有它的優點,像是:
如果要多人共用 n8n,像是工作上要互相分享 workflow
,或是大量的 workflow
要同時執行,是強烈建議使用 PostgreSQL 的。不過在個人使用上,我是覺得沒有明顯的好處,但若有遇到此類瓶頸可以考慮一二。
而 SQLite
完全不需要我們再去關心它,直接包含在 n8n 專案內就啟動了,也是一大優點。
官方提供的兩種方法,都需要安裝相關的套件 (Node.js, Docker),但後續的操作都不複雜,這兩個套件都相當穩定,只要照著官網[^1]操作,基本上不太會遇到奇怪的環境問題。
現在,我們先假設你已經在本機安裝好 n8n 了。下一篇,我們來聊聊 - [[鐵人賽 day4 - 在本機裝 n8n 官網沒說清楚的事]],像是重啟電腦後 n8n 就停掉、一些需要 webhook 的 node 無法使用的問題。
[^1]: https://docs.n8n.io/hosting/ 自架連結